In [ ]:
from bqplot import Pie, Figure
import numpy as np
import string

Basic Pie Chart


In [ ]:
data = np.random.rand(3)
pie = Pie(sizes=data, display_labels='outside', labels=list(string.ascii_uppercase))
fig = Figure(marks=[pie], animation_duration=1000)
fig

Update Data


In [ ]:
n = np.random.randint(1, 10)
pie.sizes = np.random.rand(n)

Display Values


In [ ]:
with pie.hold_sync():
    pie.display_values = True
    pie.values_format = '.1f'

Enable sort


In [ ]:
pie.sort = True

Set different styles for selected slices


In [ ]:
pie.selected_style = {'opacity': 1, 'stroke': 'white', 'stroke-width': 2}
pie.unselected_style = {'opacity': 0.2}
pie.selected = [1]

In [ ]:
pie.selected = None

For more on piechart interactions, see the Mark Interactions notebook

Modify label styling


In [ ]:
pie.label_color = 'Red'
pie.font_size = '20px'
pie.font_weight = 'bold'

Update pie shape and style


In [ ]:
pie1 = Pie(sizes=np.random.rand(6), inner_radius=0.05)
fig1 = Figure(marks=[pie1], animation_duration=1000)
fig1

Change pie dimensions


In [ ]:
# As of now, the radius sizes are absolute, in pixels
with pie1.hold_sync():
    pie1.radius = 150
    pie1.inner_radius = 100

In [ ]:
# Angles are in radians, 0 being the top vertical
with pie1.hold_sync():
    pie1.start_angle = -90
    pie1.end_angle = 90

Move the pie around

x and y attributes control the position of the pie in the figure. If no scales are passed for x and y, they are taken in absolute figure coordinates, between 0 and 1.


In [ ]:
pie1.y = 0.1
pie1.x = 0.6
pie1.radius = 180

Change slice styles

Pie slice colors cycle through the colors and opacities attribute, as the Lines Mark.


In [ ]:
pie1.stroke = 'brown'
pie1.colors = ['orange', 'darkviolet']
pie1.opacities = [.1, 1]
fig1

Represent an additional dimension using Color

The Pie allows for its colors to be determined by data, that is passed to the color attribute. A ColorScale with the desired color scheme must also be passed.


In [ ]:
from bqplot import ColorScale, ColorAxis

Nslices = 7
size_data = np.random.rand(Nslices)
color_data = np.random.randn(Nslices)

sc = ColorScale(scheme='Reds')
# The ColorAxis gives a visual representation of its ColorScale
ax = ColorAxis(scale=sc)

pie2 = Pie(sizes=size_data, scales={'color': sc}, color=color_data)
Figure(marks=[pie2], axes=[ax])

Position the Pie using custom scales

Pies can be positioned, via the x and y attributes, using either absolute figure scales or custom 'x' or 'y' scales


In [ ]:
from datetime import datetime
from bqplot.traits import convert_to_date
from bqplot import DateScale, LinearScale, Axis

avg_precipitation_days = [(d/30., 1-d/30.) for d in [2, 3, 4, 6, 12, 17, 23, 22, 15, 4, 1, 1]]
temperatures = [9, 12, 16, 20, 22, 23, 22, 22, 22, 20, 15, 11]

dates = [datetime(2010, k, 1) for k in range(1, 13)]

sc_x = DateScale()
sc_y = LinearScale()
ax_x = Axis(scale=sc_x, label='Month', tick_format='%b')
ax_y = Axis(scale=sc_y, orientation='vertical', label='Average Temperature')

pies = [Pie(sizes=precipit, x=date, y=temp,display_labels='none',
            scales={'x': sc_x, 'y': sc_y}, radius=30., stroke='navy',
            apply_clip=False, colors=['navy', 'navy'], opacities=[1, .1]) 
        for precipit, date, temp in zip(avg_precipitation_days, dates, temperatures)]

Figure(title='Kathmandu Precipitation', marks=pies, axes=[ax_x, ax_y],
       padding_x=.05, padding_y=.1)